package com.carboy.launch.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.DecimalFormat;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

/**
 * 常用操作工具类
 */
public class CommonlyTools {

	/**
	 * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
	 */
	public static int dipConvertPx(Context context, float dpValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dpValue * scale + 0.5f);
	}

	/**
	 * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
	 */
	public static int pxConvertDip(Context context, float pxValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (pxValue / scale + 0.5f);
	}

	/**
	 * 判断是否连接网络,网络是否可用
	 * 
	 * @param context
	 *            当前上下文
	 * @return 返回结果 true可用,false 不可用
	 */
	public static boolean checkNetWorkStatus(Context context) {
		ConnectivityManager manager = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);
		if (manager == null) {
			return false;
		}
		NetworkInfo networkinfo = manager.getActiveNetworkInfo();
		if (networkinfo == null || !networkinfo.isAvailable()) {
			return false;
		}
		return true;
	}

	/**
	 * 判断字符串是否等于null
	 * 
	 * @param data
	 *            需要判断是字符串
	 * @return 返回结果 ture = null,false = 非null
	 */
	public static boolean isEmpty(String data) {
		if (null == data)
			return true;
		if (data.length() == 0)
			return true;
		if (data.trim().length() == 0)
			return true;
		return false;
	}

	/**
	 * 判断某个文件夹是否创建,未创建则创建
	 * 
	 * @param file
	 *            文件夹路径
	 */
	public static File createFile(String file) {
		File rootFile = null;
		try {
			rootFile = new File(file);
			if (!rootFile.exists()) {
				// 允许创建多级目录，（当这个文件夹不存在的时候则创建文件夹）
				rootFile.mkdirs();
			}
		} catch (Exception e) {
			rootFile = null;
		}
		return rootFile;
	}

	/**
	 * 传入对应的文件大小Long,返回转换后文件大小
	 * 
	 * @param fileS
	 *            返回String文件大小
	 * @return
	 */
	public static String formetFileSize(long fileS) {
		// 转换文件大小
		DecimalFormat df = new DecimalFormat("#.00");
		String fileSizeString = "";
		if (fileS < 1024) {
			fileSizeString = df.format((double) fileS) + "B";
		} else if (fileS < 1048576) {
			fileSizeString = df.format((double) fileS / 1024) + "KB";
		} else if (fileS < 1073741824) {
			fileSizeString = df.format((double) fileS / 1048576) + "MB";
		} else {
			fileSizeString = df.format((double) fileS / 1073741824) + "G";
		}
		return fileSizeString;
	}

	/**
	 * 数据写入文件
	 * 
	 * @param file
	 *            保存路径+文件名
	 * @param content
	 *            保存内容
	 */
	public static void writeStrToFile(File file, String content) {
		try {
			FileOutputStream fos = new FileOutputStream(file); // 创建写入文件
			Writer os = new OutputStreamWriter(fos, "UTF-8"); // 写入地址,以及写入数据编码
			os.write(content); // 写入数据
			os.flush(); // 写入完成
			fos.close(); // 保存,并关闭
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static String directionBorder[] = { "北", "东北", "东", "东南", "南",
			"西南", "西", "西北", "北", };

	/**
	 * 判断方向值
	 * 
	 * @param bearing
	 * @return
	 */
	public static String getdirectionValue(float bearing) {

		return getdirectionValue(bearing, bearing);
	}

	public static String getdirectionValue(float bearing, float lastBearing) {

		String text = "";
		float border = 22.5f;
		for (int i = 0; i < 9; i++) {
			if (lastBearing < border) {
				text = directionBorder[i] + (int) bearing + "°";
				break;
			}
			border += 45;
		}
		return text;
	}
}
